library(here)
library(tidyverse)
library(cowplot)
library(GGally)
theme_set(theme_light())

library(scuttle)
library(scater)

library(kableExtra)
library(SCandwichCompanion)

Setup

## Directory setup
here_root <- "benchmarks/lupus"
here::i_am(file.path(here_root, "analysis/lupus-mock-results.Rmd"))
#> here() starts at /Users/jg/Desktop/PhD/DD_project/DD_git

res_dir <- here::here(here_root, "results")
fig_dir <- here::here(here_root, "figures")
  • Using methods: edgeR_QP, edgeR_NB, qbGLM_offset_squeeze, bGLM, qbGLM, qbGLM_offset
  • Using celltypes: B_mem, ncM
  • Using datatype: sce

Load results

res_files <- map(celltypes, ~ get_mock_res_files(
    dataset = "lupus",
    datatype = datatype,
    methods = methods,
    celltype = .x
)) %>%
    set_names(celltypes)

res_list <- map_depth(res_files, 2, readRDS)

## Check for expected data structure
stopifnot(unlist(map_depth(res_list, 3, ~ is.data.frame(.x$results))))
res_list$B_mem$bGLM$replicate_1$results$FDR
#>   [1] 0.850338348 0.908959511 0.850338348 0.908959511 0.908959511 0.908959511
#>   [7] 0.871412749 0.734631368 0.908959511 0.882541084 0.701592491 0.961764236
#>  [13] 0.115345375 0.850338348 0.882541084 0.000413808 0.908959511 0.701592491
#>  [19] 0.992503707 0.882541084 0.882541084 0.701592491 0.883957023 0.992503707
#>  [25] 0.908959511 0.799474646 0.850338348 0.850338348 0.701592491 0.992503707
#>  [31] 0.883957023 0.850338348 0.871412749 0.908959511 0.701592491 0.701592491
#>  [37] 0.701592491 0.850338348 0.882541084 0.908959511 0.882541084 0.882541084
#>  [43] 0.850338348 0.908959511 0.882541084 0.908959511 0.908959511 0.701592491
#>  [49] 0.753275524 0.882541084 0.895018332 0.908959511 0.799474646 0.883957023
#>  [55] 0.992503707 0.850338348 0.911633195 0.882541084 0.882541084 0.883957023
#>  [61] 1.000000000 0.908959511 0.882541084 0.883957023 0.072012812 0.701592491
#>  [67] 0.998083101 0.850338348 0.929560014 0.959168217 0.871412749 0.883957023
#>  [73] 0.799474646 0.871412749 0.882541084 0.850338348 0.701592491 0.850338348
#>  [79] 0.921140823 0.992503707 0.908959511 0.850338348 0.992503707 0.701592491
#>  [85] 0.882541084 0.961764236 0.920292976 0.882541084 0.908959511 0.882541084
#>  [91] 0.850338348 0.961764236 0.701592491 0.799474646 0.850338348 0.850338348
#>  [97] 0.850338348 0.701592491 0.410356977 0.883957023

Load SCE objects

data_files <- map(celltypes, ~ get_SCE_files(
    dataset = "lupus", which = "mock_replicates",
    celltype = .x
)) %>%
    set_names(celltypes)
sce_objects <- map(data_files, readRDS)

Data overview

  • The results were generated from 5 mock replicates
  • Each replicate was generated by randomly splitting the subjects in two mock groups
  • No sub-sampling of cells per patient was performed for this data
map_dfr(sce_objects,
    ~ map_dfr(.x, function(x) c(nrows = nrow(x), ncols = ncol(x)),
        .id = "replicate"
    ),
    .id = "celltypes"
)

Subjects are divided across mock groups as follows:

map(sce_objects[[1]], function(x) table(x$ind_cov, x$mock_group))
#> $replicate_1
#>                    
#>                       A   B
#>   IGTB141_IGTB141   144   0
#>   IGTB143_IGTB143    84   0
#>   IGTB195_IGTB195     0 119
#>   IGTB469_IGTB469    89   0
#>   IGTB498_IGTB498   208   0
#>   IGTB508_IGTB508   278   0
#>   IGTB514_IGTB514   373   0
#>   IGTB645_IGTB645   123   0
#>   IGTB670_IGTB670     0  64
#>   IGTB826_IGTB826     0 511
#>   IGTB884_IGTB884   128   0
#>   IGTB986_IGTB986   137   0
#>   IGTB1372_IGTB1372   0 136
#>   IGTB1506_IGTB1506   0  83
#>   IGTB1539_IGTB1539 305   0
#>   IGTB1575_IGTB1575   0 164
#>   IGTB1650_IGTB1650   0 137
#>   IGTB1762_IGTB1762 176   0
#>   IGTB1768_IGTB1768 107   0
#>   IGTB1789_IGTB1789   0 341
#>   IGTB1793_IGTB1793   0 119
#>   IGTB1814_IGTB1814 485   0
#>   IGTB1815_IGTB1815   0 168
#>   IGTB1826_IGTB1826   0  70
#>   IGTB1827_IGTB1827 122   0
#>   IGTB1828_IGTB1828 356   0
#>   IGTB1840_IGTB1840   0 328
#>   IGTB1844_IGTB1844   0 177
#>   IGTB1871_IGTB1871   0 241
#>   IGTB1895_IGTB1895 231   0
#>   IGTB1901_IGTB1901 150   0
#>   IGTB1906_IGTB1906   0 185
#>   IGTB1908_IGTB1908 139   0
#>   IGTB1913_IGTB1913 156   0
#>   IGTB1916_IGTB1916   0 183
#>   IGTB1921_IGTB1921   0 181
#>   IGTB1952_IGTB1952 199   0
#>   IGTB1966_IGTB1966   0 567
#>   IGTB1974_IGTB1974   0 129
#>   IGTB1982_IGTB1982   0 244
#>   IGTB1987_IGTB1987   0 145
#>   IGTB1996_IGTB1996  88   0
#>   IGTB2007_IGTB2007 149   0
#>   IGTB2065_IGTB2065   0 205
#> 
#> $replicate_2
#>                    
#>                       A   B
#>   IGTB141_IGTB141   144   0
#>   IGTB143_IGTB143     0  84
#>   IGTB195_IGTB195   119   0
#>   IGTB469_IGTB469    89   0
#>   IGTB498_IGTB498     0 208
#>   IGTB508_IGTB508     0 278
#>   IGTB514_IGTB514     0 373
#>   IGTB645_IGTB645     0 123
#>   IGTB670_IGTB670     0  64
#>   IGTB826_IGTB826   511   0
#>   IGTB884_IGTB884     0 128
#>   IGTB986_IGTB986   137   0
#>   IGTB1372_IGTB1372   0 136
#>   IGTB1506_IGTB1506   0  83
#>   IGTB1539_IGTB1539 305   0
#>   IGTB1575_IGTB1575 164   0
#>   IGTB1650_IGTB1650 137   0
#>   IGTB1762_IGTB1762   0 176
#>   IGTB1768_IGTB1768 107   0
#>   IGTB1789_IGTB1789   0 341
#>   IGTB1793_IGTB1793   0 119
#>   IGTB1814_IGTB1814 485   0
#>   IGTB1815_IGTB1815 168   0
#>   IGTB1826_IGTB1826  70   0
#>   IGTB1827_IGTB1827 122   0
#>   IGTB1828_IGTB1828 356   0
#>   IGTB1840_IGTB1840   0 328
#>   IGTB1844_IGTB1844   0 177
#>   IGTB1871_IGTB1871 241   0
#>   IGTB1895_IGTB1895   0 231
#>   IGTB1901_IGTB1901 150   0
#>   IGTB1906_IGTB1906 185   0
#>   IGTB1908_IGTB1908   0 139
#>   IGTB1913_IGTB1913   0 156
#>   IGTB1916_IGTB1916   0 183
#>   IGTB1921_IGTB1921 181   0
#>   IGTB1952_IGTB1952 199   0
#>   IGTB1966_IGTB1966   0 567
#>   IGTB1974_IGTB1974   0 129
#>   IGTB1982_IGTB1982 244   0
#>   IGTB1987_IGTB1987   0 145
#>   IGTB1996_IGTB1996   0  88
#>   IGTB2007_IGTB2007 149   0
#>   IGTB2065_IGTB2065 205   0
#> 
#> $replicate_3
#>                    
#>                       A   B
#>   IGTB141_IGTB141     0 144
#>   IGTB143_IGTB143     0  84
#>   IGTB195_IGTB195     0 119
#>   IGTB469_IGTB469    89   0
#>   IGTB498_IGTB498     0 208
#>   IGTB508_IGTB508     0 278
#>   IGTB514_IGTB514     0 373
#>   IGTB645_IGTB645     0 123
#>   IGTB670_IGTB670    64   0
#>   IGTB826_IGTB826   511   0
#>   IGTB884_IGTB884   128   0
#>   IGTB986_IGTB986     0 137
#>   IGTB1372_IGTB1372 136   0
#>   IGTB1506_IGTB1506  83   0
#>   IGTB1539_IGTB1539 305   0
#>   IGTB1575_IGTB1575 164   0
#>   IGTB1650_IGTB1650   0 137
#>   IGTB1762_IGTB1762   0 176
#>   IGTB1768_IGTB1768   0 107
#>   IGTB1789_IGTB1789 341   0
#>   IGTB1793_IGTB1793 119   0
#>   IGTB1814_IGTB1814 485   0
#>   IGTB1815_IGTB1815   0 168
#>   IGTB1826_IGTB1826   0  70
#>   IGTB1827_IGTB1827 122   0
#>   IGTB1828_IGTB1828 356   0
#>   IGTB1840_IGTB1840 328   0
#>   IGTB1844_IGTB1844 177   0
#>   IGTB1871_IGTB1871   0 241
#>   IGTB1895_IGTB1895 231   0
#>   IGTB1901_IGTB1901 150   0
#>   IGTB1906_IGTB1906 185   0
#>   IGTB1908_IGTB1908 139   0
#>   IGTB1913_IGTB1913   0 156
#>   IGTB1916_IGTB1916   0 183
#>   IGTB1921_IGTB1921 181   0
#>   IGTB1952_IGTB1952   0 199
#>   IGTB1966_IGTB1966 567   0
#>   IGTB1974_IGTB1974 129   0
#>   IGTB1982_IGTB1982   0 244
#>   IGTB1987_IGTB1987   0 145
#>   IGTB1996_IGTB1996   0  88
#>   IGTB2007_IGTB2007 149   0
#>   IGTB2065_IGTB2065   0 205
#> 
#> $replicate_4
#>                    
#>                       A   B
#>   IGTB141_IGTB141     0 144
#>   IGTB143_IGTB143    84   0
#>   IGTB195_IGTB195   119   0
#>   IGTB469_IGTB469     0  89
#>   IGTB498_IGTB498     0 208
#>   IGTB508_IGTB508     0 278
#>   IGTB514_IGTB514   373   0
#>   IGTB645_IGTB645     0 123
#>   IGTB670_IGTB670    64   0
#>   IGTB826_IGTB826     0 511
#>   IGTB884_IGTB884   128   0
#>   IGTB986_IGTB986     0 137
#>   IGTB1372_IGTB1372   0 136
#>   IGTB1506_IGTB1506   0  83
#>   IGTB1539_IGTB1539 305   0
#>   IGTB1575_IGTB1575 164   0
#>   IGTB1650_IGTB1650 137   0
#>   IGTB1762_IGTB1762   0 176
#>   IGTB1768_IGTB1768 107   0
#>   IGTB1789_IGTB1789 341   0
#>   IGTB1793_IGTB1793   0 119
#>   IGTB1814_IGTB1814   0 485
#>   IGTB1815_IGTB1815 168   0
#>   IGTB1826_IGTB1826   0  70
#>   IGTB1827_IGTB1827   0 122
#>   IGTB1828_IGTB1828   0 356
#>   IGTB1840_IGTB1840   0 328
#>   IGTB1844_IGTB1844   0 177
#>   IGTB1871_IGTB1871   0 241
#>   IGTB1895_IGTB1895   0 231
#>   IGTB1901_IGTB1901 150   0
#>   IGTB1906_IGTB1906 185   0
#>   IGTB1908_IGTB1908 139   0
#>   IGTB1913_IGTB1913 156   0
#>   IGTB1916_IGTB1916 183   0
#>   IGTB1921_IGTB1921 181   0
#>   IGTB1952_IGTB1952   0 199
#>   IGTB1966_IGTB1966 567   0
#>   IGTB1974_IGTB1974   0 129
#>   IGTB1982_IGTB1982   0 244
#>   IGTB1987_IGTB1987   0 145
#>   IGTB1996_IGTB1996  88   0
#>   IGTB2007_IGTB2007 149   0
#>   IGTB2065_IGTB2065 205   0
#> 
#> $replicate_5
#>                    
#>                       A   B
#>   IGTB141_IGTB141     0 144
#>   IGTB143_IGTB143     0  84
#>   IGTB195_IGTB195     0 119
#>   IGTB469_IGTB469    89   0
#>   IGTB498_IGTB498   208   0
#>   IGTB508_IGTB508     0 278
#>   IGTB514_IGTB514   373   0
#>   IGTB645_IGTB645     0 123
#>   IGTB670_IGTB670    64   0
#>   IGTB826_IGTB826   511   0
#>   IGTB884_IGTB884     0 128
#>   IGTB986_IGTB986   137   0
#>   IGTB1372_IGTB1372 136   0
#>   IGTB1506_IGTB1506   0  83
#>   IGTB1539_IGTB1539 305   0
#>   IGTB1575_IGTB1575 164   0
#>   IGTB1650_IGTB1650 137   0
#>   IGTB1762_IGTB1762 176   0
#>   IGTB1768_IGTB1768   0 107
#>   IGTB1789_IGTB1789 341   0
#>   IGTB1793_IGTB1793   0 119
#>   IGTB1814_IGTB1814   0 485
#>   IGTB1815_IGTB1815   0 168
#>   IGTB1826_IGTB1826  70   0
#>   IGTB1827_IGTB1827   0 122
#>   IGTB1828_IGTB1828   0 356
#>   IGTB1840_IGTB1840   0 328
#>   IGTB1844_IGTB1844 177   0
#>   IGTB1871_IGTB1871   0 241
#>   IGTB1895_IGTB1895 231   0
#>   IGTB1901_IGTB1901 150   0
#>   IGTB1906_IGTB1906   0 185
#>   IGTB1908_IGTB1908   0 139
#>   IGTB1913_IGTB1913   0 156
#>   IGTB1916_IGTB1916 183   0
#>   IGTB1921_IGTB1921 181   0
#>   IGTB1952_IGTB1952   0 199
#>   IGTB1966_IGTB1966 567   0
#>   IGTB1974_IGTB1974   0 129
#>   IGTB1982_IGTB1982   0 244
#>   IGTB1987_IGTB1987 145   0
#>   IGTB1996_IGTB1996   0  88
#>   IGTB2007_IGTB2007 149   0
#>   IGTB2065_IGTB2065 205   0

Extract results of interest

Runtimes

## Get runtimes for each celltype
runtimes <- map(res_list, ~ map_dfr(.x, get_runtimes, depth = 1, .id = "method"))

P-values

res_tables <- map_depth(
    res_list, 2,
    ~ get_aggregated_rep_tables(.x, depth = 1)
) %>%
    map(combine_tables, .id = "method")

Visualize results

Run times

runtime_plots <- imap(runtimes,
    ~ plot_run_times(.x, width = 0.2, height = 0) +
      ggtitle(.y)
)

B_mem

ncM

Number of significant genes for different FDR levels

n_sign_summaries <- map(res_tables, function(tmp) {
    tmp %>%
        group_by(replicate, method) %>%
        summarise(
            sum(FDR < 0.01),
            sum(FDR < 0.05),
            sum(FDR < 0.1),
            .groups = "drop"
        )
})

B_mem

Cells per patient: B_mem
method sum(FDR < 0.01) sum(FDR < 0.05) sum(FDR < 0.1)
Replicate: 1
bGLM 1 1 2
edgeR_NB 0 1 1
edgeR_QP 0 1 1
qbGLM 1 1 2
qbGLM_offset 1 2 2
qbGLM_offset_squeeze 1 2 2
Replicate: 2
bGLM 0 2 3
edgeR_NB 0 0 0
edgeR_QP 0 0 0
qbGLM 0 2 3
qbGLM_offset 0 2 4
qbGLM_offset_squeeze 0 2 4
Replicate: 3
bGLM 0 0 3
edgeR_NB 0 0 0
edgeR_QP 0 0 0
qbGLM 0 0 3
qbGLM_offset 0 0 3
qbGLM_offset_squeeze 0 0 3
Replicate: 4
bGLM 0 0 0
edgeR_NB 0 0 0
edgeR_QP 0 0 0
qbGLM 0 0 0
qbGLM_offset 0 0 0
qbGLM_offset_squeeze 0 0 0
Replicate: 5
bGLM 0 0 0
edgeR_NB 0 0 0
edgeR_QP 0 0 0
qbGLM 0 0 0
qbGLM_offset 0 0 0
qbGLM_offset_squeeze 0 0 0

ncM

Cells per patient: ncM
method sum(FDR < 0.01) sum(FDR < 0.05) sum(FDR < 0.1)
Replicate: 1
bGLM 0 1 1
edgeR_NB 0 0 0
edgeR_QP 0 0 0
qbGLM 0 1 1
qbGLM_offset 0 1 1
qbGLM_offset_squeeze 0 1 1
Replicate: 2
bGLM 1 1 4
edgeR_NB 1 1 1
edgeR_QP 1 1 1
qbGLM 1 1 4
qbGLM_offset 1 1 3
qbGLM_offset_squeeze 1 1 3
Replicate: 3
bGLM 1 1 1
edgeR_NB 0 1 1
edgeR_QP 0 1 1
qbGLM 1 1 1
qbGLM_offset 1 1 1
qbGLM_offset_squeeze 1 1 1
Replicate: 4
bGLM 2 3 5
edgeR_NB 0 0 0
edgeR_QP 0 0 0
qbGLM 2 3 5
qbGLM_offset 0 1 3
qbGLM_offset_squeeze 0 1 3
Replicate: 5
bGLM 1 1 1
edgeR_NB 0 0 0
edgeR_QP 0 0 0
qbGLM 1 1 1
qbGLM_offset 1 1 1
qbGLM_offset_squeeze 1 1 1

P-value distributions

pval_figs <- map(res_tables, pval_hist)

B_mem

ncM

P-value distributions stratified by expression level

For each replicate, calculate average log-normalized counts, using scuttle::calculateAverage().

## Calculate average counts for each replicate
avg_counts <- map_depth(sce_objects, 2,
    ~ calculateAverage(counts(.x))
)

## Split res_tables per replicate
res_tables_split <- map(res_tables, ~ split(.x, .x$replicate))

## Add average counts to results tables
## Note that for the 'combined' celltypes, the average counts will be the same
## for each celltype contrast
res_tables_split <- map2(
    res_tables_split, avg_counts,
    ~ map2(.x, .y, function(res, avg_cnt) {
        res$avg_count <- avg_cnt[res$gene]
        res
    })
)

Make p-value histograms stratified by the average counts.

pval_hist_strat_plots <- map(res_tables_split,
    ~ imap(.x, function(y, replicate) {
        replicate <- str_remove(replicate, "replicate_")
        title <- paste("Replicate:", replicate)
        pval_hist_strat(y, n_groups = 6) +
            ggtitle(title)
    })
)

B_mem

ncM

Session info

Session info
#> [1] "2023-04-06 15:46:55 CEST"
#> Local:    main /Users/jg/Desktop/PhD/DD_project/DD_git
#> Remote:   main @ origin (git@github.com:jgilis/DD_benchmark.git)
#> Head:     [ea1c62f] 2023-04-06: update description
#> ─ Session info ────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.1.3 (2022-03-10)
#>  os       macOS Big Sur/Monterey 10.16
#>  system   x86_64, darwin17.0
#>  ui       X11
#>  language (EN)
#>  collate  C
#>  ctype    UTF-8
#>  tz       Europe/Brussels
#>  date     2023-04-06
#>  pandoc   2.17.1.1 @ /Users/jg/opt/anaconda3/bin/ (via rmarkdown)
#> 
#> ─ Packages ────────────────────────────────────────────────────────────────────────
#>  package              * version   date (UTC) lib source
#>  argparse             * 2.2.2     2023-02-15 [1] CRAN (R 4.1.2)
#>  assertthat             0.2.1     2019-03-21 [1] CRAN (R 4.1.0)
#>  backports              1.4.1     2021-12-13 [1] CRAN (R 4.1.2)
#>  beachmat               2.10.0    2021-10-26 [1] Bioconductor
#>  beeswarm               0.4.0     2021-06-01 [1] CRAN (R 4.1.0)
#>  Biobase              * 2.54.0    2021-10-26 [1] Bioconductor
#>  BiocGenerics         * 0.40.0    2021-10-26 [1] Bioconductor
#>  BiocNeighbors          1.12.0    2021-10-26 [1] Bioconductor
#>  BiocParallel           1.28.3    2021-12-09 [1] Bioconductor
#>  BiocSingular           1.10.0    2021-10-26 [1] Bioconductor
#>  bitops                 1.0-7     2021-04-24 [1] CRAN (R 4.1.0)
#>  bluster                1.4.0     2021-10-26 [1] Bioconductor
#>  broom                  0.8.0     2022-04-13 [1] CRAN (R 4.1.2)
#>  bslib                  0.4.0     2022-07-16 [1] CRAN (R 4.1.2)
#>  cachem                 1.0.6     2021-08-19 [1] CRAN (R 4.1.0)
#>  cellranger             1.1.0     2016-07-27 [1] CRAN (R 4.1.0)
#>  cli                    3.6.0     2023-01-09 [1] CRAN (R 4.1.2)
#>  cluster                2.1.3     2022-03-28 [1] CRAN (R 4.1.2)
#>  colorspace             2.1-0     2023-01-23 [1] CRAN (R 4.1.2)
#>  cowplot              * 1.1.1     2020-12-30 [1] CRAN (R 4.1.0)
#>  crayon                 1.5.1     2022-03-26 [1] CRAN (R 4.1.2)
#>  DBI                    1.1.2     2021-12-20 [1] CRAN (R 4.1.0)
#>  dbplyr                 2.1.1     2021-04-06 [1] CRAN (R 4.1.0)
#>  DelayedArray           0.20.0    2021-10-26 [1] Bioconductor
#>  DelayedMatrixStats     1.16.0    2021-10-26 [1] Bioconductor
#>  digest                 0.6.29    2021-12-01 [1] CRAN (R 4.1.2)
#>  dplyr                * 1.0.9     2022-04-28 [1] CRAN (R 4.1.2)
#>  dqrng                  0.3.0     2021-05-01 [1] CRAN (R 4.1.0)
#>  DT                     0.23      2022-05-10 [1] CRAN (R 4.1.2)
#>  edgeR                  3.36.0    2021-10-26 [1] Bioconductor
#>  ellipsis               0.3.2     2021-04-29 [1] CRAN (R 4.1.0)
#>  evaluate               0.15      2022-02-18 [1] CRAN (R 4.1.2)
#>  fansi                  1.0.4     2023-01-22 [1] CRAN (R 4.1.2)
#>  farver                 2.1.1     2022-07-06 [1] CRAN (R 4.1.3)
#>  fastmap                1.1.0     2021-01-25 [1] CRAN (R 4.1.0)
#>  findpython             1.0.8     2023-03-14 [1] CRAN (R 4.1.2)
#>  forcats              * 0.5.1     2021-01-27 [1] CRAN (R 4.1.0)
#>  fs                     1.5.2     2021-12-08 [1] CRAN (R 4.1.2)
#>  generics               0.1.3     2022-07-05 [1] CRAN (R 4.1.2)
#>  GenomeInfoDb         * 1.30.1    2022-01-30 [1] Bioconductor
#>  GenomeInfoDbData       1.2.7     2021-12-18 [1] Bioconductor
#>  GenomicRanges        * 1.46.1    2021-11-18 [1] Bioconductor
#>  GGally               * 2.1.2     2021-06-21 [1] CRAN (R 4.1.0)
#>  ggbeeswarm             0.6.0     2017-08-07 [1] CRAN (R 4.1.0)
#>  ggplot2              * 3.4.1     2023-02-10 [1] CRAN (R 4.1.2)
#>  ggrepel                0.9.1     2021-01-15 [1] CRAN (R 4.1.0)
#>  git2r                  0.31.0    2023-01-26 [1] CRAN (R 4.1.2)
#>  glue                   1.6.2     2022-02-24 [1] CRAN (R 4.1.2)
#>  gridExtra              2.3       2017-09-09 [1] CRAN (R 4.1.0)
#>  gtable                 0.3.1     2022-09-01 [1] CRAN (R 4.1.2)
#>  haven                  2.5.0     2022-04-15 [1] CRAN (R 4.1.2)
#>  here                 * 1.0.1     2020-12-13 [1] CRAN (R 4.1.0)
#>  highr                  0.9       2021-04-16 [1] CRAN (R 4.1.0)
#>  hms                    1.1.1     2021-09-26 [1] CRAN (R 4.1.0)
#>  htmltools              0.5.3     2022-07-18 [1] CRAN (R 4.1.2)
#>  htmlwidgets            1.5.4     2021-09-08 [1] CRAN (R 4.1.0)
#>  httpuv                 1.6.5     2022-01-05 [1] CRAN (R 4.1.2)
#>  httr                   1.4.3     2022-05-04 [1] CRAN (R 4.1.2)
#>  iCOBRA                 1.22.2    2021-12-19 [1] Bioconductor
#>  igraph                 1.4.1     2023-02-24 [1] CRAN (R 4.1.2)
#>  IRanges              * 2.28.0    2021-10-26 [1] Bioconductor
#>  irlba                  2.3.5.1   2022-10-03 [1] CRAN (R 4.1.2)
#>  jquerylib              0.1.4     2021-04-26 [1] CRAN (R 4.1.0)
#>  jsonlite               1.8.0     2022-02-22 [1] CRAN (R 4.1.2)
#>  kableExtra           * 1.3.4     2021-02-20 [1] CRAN (R 4.1.2)
#>  knitr                  1.39      2022-04-26 [1] CRAN (R 4.1.2)
#>  labeling               0.4.2     2020-10-20 [1] CRAN (R 4.1.0)
#>  later                  1.3.0     2021-08-18 [1] CRAN (R 4.1.0)
#>  lattice                0.20-45   2021-09-22 [1] CRAN (R 4.1.3)
#>  lifecycle              1.0.3     2022-10-07 [1] CRAN (R 4.1.2)
#>  limma                  3.50.3    2022-04-07 [1] Bioconductor
#>  locfit                 1.5-9.7   2023-01-02 [1] CRAN (R 4.1.2)
#>  lubridate              1.8.0     2021-10-07 [1] CRAN (R 4.1.0)
#>  magrittr               2.0.3     2022-03-30 [1] CRAN (R 4.1.2)
#>  Matrix                 1.4-1     2022-03-23 [1] CRAN (R 4.1.2)
#>  MatrixGenerics       * 1.6.0     2021-10-26 [1] Bioconductor
#>  matrixStats          * 0.63.0    2022-11-18 [1] CRAN (R 4.1.2)
#>  metapod                1.2.0     2021-10-26 [1] Bioconductor
#>  mime                   0.12      2021-09-28 [1] CRAN (R 4.1.0)
#>  modelr                 0.1.8     2020-05-19 [1] CRAN (R 4.1.0)
#>  munsell                0.5.0     2018-06-12 [1] CRAN (R 4.1.0)
#>  pillar                 1.8.1     2022-08-19 [1] CRAN (R 4.1.2)
#>  pkgconfig              2.0.3     2019-09-22 [1] CRAN (R 4.1.0)
#>  plyr                   1.8.7     2022-03-24 [1] CRAN (R 4.1.2)
#>  promises               1.2.0.1   2021-02-11 [1] CRAN (R 4.1.0)
#>  purrr                * 0.3.4     2020-04-17 [1] CRAN (R 4.1.0)
#>  R6                     2.5.1     2021-08-19 [1] CRAN (R 4.1.0)
#>  RColorBrewer           1.1-3     2022-04-03 [1] CRAN (R 4.1.2)
#>  Rcpp                   1.0.10    2023-01-22 [1] CRAN (R 4.1.2)
#>  RCurl                  1.98-1.10 2023-01-27 [1] CRAN (R 4.1.2)
#>  readr                * 2.1.2     2022-01-30 [1] CRAN (R 4.1.2)
#>  readxl                 1.4.0     2022-03-28 [1] CRAN (R 4.1.2)
#>  reprex                 2.0.1     2021-08-05 [1] CRAN (R 4.1.0)
#>  reshape                0.8.9     2022-04-12 [1] CRAN (R 4.1.2)
#>  reshape2               1.4.4     2020-04-09 [1] CRAN (R 4.1.0)
#>  rlang                  1.0.6     2022-09-24 [1] CRAN (R 4.1.2)
#>  rmarkdown              2.14      2022-04-25 [1] CRAN (R 4.1.3)
#>  ROCR                   1.0-11    2020-05-02 [1] CRAN (R 4.1.0)
#>  rprojroot              2.0.3     2022-04-02 [1] CRAN (R 4.1.2)
#>  rstudioapi             0.13      2020-11-12 [1] CRAN (R 4.1.0)
#>  rsvd                   1.0.5     2021-04-16 [1] CRAN (R 4.1.0)
#>  rvest                  1.0.2     2021-10-16 [1] CRAN (R 4.1.0)
#>  S4Vectors            * 0.32.4    2022-03-29 [1] Bioconductor
#>  sass                   0.4.2     2022-07-16 [1] CRAN (R 4.1.2)
#>  ScaledMatrix           1.2.0     2021-10-26 [1] Bioconductor
#>  scales                 1.2.1     2022-08-20 [1] CRAN (R 4.1.2)
#>  SCandwichCompanion   * 0.1.1     2023-04-06 [1] local
#>  scater               * 1.22.0    2021-10-26 [1] Bioconductor
#>  scran                  1.22.1    2021-11-14 [1] Bioconductor
#>  scuttle              * 1.4.0     2021-10-26 [1] Bioconductor
#>  sessioninfo            1.2.2     2021-12-06 [1] CRAN (R 4.1.0)
#>  shiny                  1.7.2     2022-07-19 [1] CRAN (R 4.1.2)
#>  shinyBS                0.61.1    2022-04-17 [1] CRAN (R 4.1.2)
#>  shinydashboard         0.7.2     2021-09-30 [1] CRAN (R 4.1.0)
#>  SingleCellExperiment * 1.16.0    2021-10-26 [1] Bioconductor
#>  sparseMatrixStats      1.6.0     2021-10-26 [1] Bioconductor
#>  statmod                1.5.0     2023-01-06 [1] CRAN (R 4.1.2)
#>  stringi                1.7.8     2022-07-11 [1] CRAN (R 4.1.2)
#>  stringr              * 1.4.0     2019-02-10 [1] CRAN (R 4.1.0)
#>  SummarizedExperiment * 1.24.0    2021-10-26 [1] Bioconductor
#>  svglite                2.1.1     2023-01-10 [1] CRAN (R 4.1.2)
#>  systemfonts            1.0.4     2022-02-11 [1] CRAN (R 4.1.2)
#>  tibble               * 3.1.8     2022-07-22 [1] CRAN (R 4.1.2)
#>  tidyr                * 1.2.0     2022-02-01 [1] CRAN (R 4.1.2)
#>  tidyselect             1.1.2     2022-02-21 [1] CRAN (R 4.1.2)
#>  tidyverse            * 1.3.1     2021-04-15 [1] CRAN (R 4.1.0)
#>  tzdb                   0.3.0     2022-03-28 [1] CRAN (R 4.1.2)
#>  UpSetR                 1.4.0     2019-05-22 [1] CRAN (R 4.1.0)
#>  utf8                   1.2.3     2023-01-31 [1] CRAN (R 4.1.2)
#>  vctrs                  0.5.2     2023-01-23 [1] CRAN (R 4.1.2)
#>  vipor                  0.4.5     2017-03-22 [1] CRAN (R 4.1.0)
#>  viridis                0.6.2     2021-10-13 [1] CRAN (R 4.1.0)
#>  viridisLite            0.4.1     2022-08-22 [1] CRAN (R 4.1.2)
#>  webshot                0.5.4     2022-09-26 [1] CRAN (R 4.1.2)
#>  withr                  2.5.0     2022-03-03 [1] CRAN (R 4.1.2)
#>  xfun                   0.31      2022-05-10 [1] CRAN (R 4.1.2)
#>  xml2                   1.3.3     2021-11-30 [1] CRAN (R 4.1.2)
#>  xtable                 1.8-4     2019-04-21 [1] CRAN (R 4.1.0)
#>  XVector                0.34.0    2021-10-26 [1] Bioconductor
#>  yaml                   2.3.5     2022-02-21 [1] CRAN (R 4.1.2)
#>  zlibbioc               1.40.0    2021-10-26 [1] Bioconductor
#> 
#>  [1] /Library/Frameworks/R.framework/Versions/4.1/Resources/library
#> 
#> ───────────────────────────────────────────────────────────────────────────────────